package notification

import (
	"fmt"
	"health-check/internal/config"
	"health-check/internal/logger"
)

// NotificationManager 通知管理器
type NotificationManager struct {
	feishu *FeishuNotifier
	config *config.NotificationConfig
}

// NewNotificationManager 创建通知管理器
func NewNotificationManager(cfg *config.NotificationConfig) *NotificationManager {
	nm := &NotificationManager{
		config: cfg,
	}

	// 初始化飞书通知器
	if cfg.Feishu.Enabled {
		nm.feishu = NewFeishuNotifier(&cfg.Feishu)
	}

	return nm
}

// SendProcessAlert 发送进程告警
func (nm *NotificationManager) SendProcessAlert(processName, status, message string) {
	if !nm.config.Enabled {
		return
	}

	// 发送飞书通知
	if nm.feishu != nil && nm.feishu.IsEnabled() {
		if err := nm.feishu.SendProcessAlert(processName, status, message); err != nil {
			logger.Errorf("发送飞书进程告警失败: %v", err)
		}
	}
}

// SendProcessRestartAlert 发送进程重启告警
func (nm *NotificationManager) SendProcessRestartAlert(processName string, restartCount int, message string) {
	if !nm.config.Enabled {
		return
	}

	// 发送飞书通知
	if nm.feishu != nil && nm.feishu.IsEnabled() {
		if err := nm.feishu.SendProcessRestartAlert(processName, restartCount, message); err != nil {
			logger.Errorf("发送飞书重启告警失败: %v", err)
		}
	}
}

// SendProcessRecoveryAlert 发送进程恢复告警
func (nm *NotificationManager) SendProcessRecoveryAlert(processName string) {
	if !nm.config.Enabled {
		return
	}

	// 发送飞书通知
	if nm.feishu != nil && nm.feishu.IsEnabled() {
		if err := nm.feishu.SendProcessRecoveryAlert(processName); err != nil {
			logger.Errorf("发送飞书恢复告警失败: %v", err)
		}
	}
}

// SendSystemAlert 发送系统告警
func (nm *NotificationManager) SendSystemAlert(title, message string) {
	if !nm.config.Enabled {
		return
	}

	// 发送飞书通知
	if nm.feishu != nil && nm.feishu.IsEnabled() {
		if err := nm.feishu.SendSystemAlert(title, message); err != nil {
			logger.Errorf("发送飞书系统告警失败: %v", err)
		}
	}
}

// TestAllNotifications 测试所有通知
func (nm *NotificationManager) TestAllNotifications() error {
	if !nm.config.Enabled {
		return fmt.Errorf("通知功能未启用")
	}

	var lastErr error

	// 测试飞书通知
	if nm.feishu != nil && nm.feishu.IsEnabled() {
		if err := nm.feishu.TestConnection(); err != nil {
			logger.Errorf("飞书通知测试失败: %v", err)
			lastErr = err
		} else {
			logger.Info("飞书通知测试成功")
		}
	}

	return lastErr
}

// IsEnabled 检查通知是否启用
func (nm *NotificationManager) IsEnabled() bool {
	return nm.config.Enabled
}

// GetStatus 获取通知状态
func (nm *NotificationManager) GetStatus() map[string]interface{} {
	status := map[string]interface{}{
		"enabled": nm.config.Enabled,
		"feishu": map[string]interface{}{
			"enabled": nm.feishu != nil && nm.feishu.IsEnabled(),
		},
	}

	return status
}
